package com.lynn.mmcc.common.exception;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
import java.util.Locale;
import java.util.Properties;

import org.apache.commons.lang.StringUtils;

/**
 * 操作资源文件的通用类
 * @Time 11:10:51 AM
 * @author mengxiankong
 */
public class MessageUtils {

	private static Properties props = null;
	private static File configFile = null;
	private static long fileLastModified = 0L;

	private static String defaultResourceFileName = "messageResource_zh_CN.properties";

	/**
	 * 初始化
	 *
	 */
	private static void init() {
		URL url = MessageUtils.class.getClassLoader().getResource(
				defaultResourceFileName);
		configFile = new File(url.getFile());
		fileLastModified = configFile.lastModified();
		props = new Properties();
		load();
	}

	/**
	 * 加载资源文件
	 *
	 */
	private static void load() {
		try {
			props.load(new FileInputStream(configFile));
			fileLastModified = configFile.lastModified();
		} catch (IOException e) {
			throw new RuntimeException(e);
		}
	}

	/**
	 * 根据一个key取得对应的资源消息
	 * @param key 消息key
	 * @return 消息
	 */
	public static String getMessage(String key) {
		if ((configFile == null) || (props == null))
			init();
		if (configFile.lastModified() > fileLastModified)
			load();
		String message = props.getProperty(key);
		if (StringUtils.isEmpty(message)) {
			return key;
		} else {
			return message;
		}
	}

	/**
	 * 取得带有参数的资源文件，并将参数替换为对应的实际值
	 * @param key 消息key
	 * @param values 参数数组，形式为new String[]{"我"}
	 * @return 消息
	 */
	public static String getMessage(String key, String[] values) {
		if ((configFile == null) || (props == null))
			init();
		if (configFile.lastModified() > fileLastModified)
			load();
		String message = props.getProperty(key);
		if (StringUtils.isEmpty(message))
			return key;

		if (values != null) {
			for (int i = 0; i < values.length; i++) {
				message = StringUtils
						.replace(message, "{" + i + "}", values[i]);
			}
		}

		return message;
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		 MessageUtils mu = new MessageUtils();
		Locale locale = Locale.getDefault();
		System.out.println("_" + locale.getLanguage() + "_"	+ locale.getCountry());
		System.out.println(MessageUtils.getMessage("titles.titles"));
		System.out.println(MessageUtils.getMessage("system.welcome", new String[]{"孟献孔"}));
		System.out.println(MessageUtils.getMessage("system.date",new String[]{"2008年11月13日","三"}));

	}

}
